package com.bookocean.domain.service;

import com.bookocean.controller.dto.NovelCompleteVoteDto;

/**
 * 小说完结投票领域服务接口
 * 
 * @author BookOcean
 * @since 2024-01-01
 */
public interface NovelCompleteVoteService {
    
    /**
     * 发起完结投票
     * 
     * @param novelId 小说ID
     * @param userId 发起者用户ID
     * @return 投票信息
     */
    NovelCompleteVoteDto initiateCompleteVote(Long novelId, Long userId);
    
    /**
     * 投票同意完结
     * 
     * @param novelId 小说ID
     * @param userId 用户ID
     * @return 投票信息
     */
    NovelCompleteVoteDto voteForComplete(Long novelId, Long userId);
    
    /**
     * 投票反对完结
     * 
     * @param novelId 小说ID
     * @param userId 用户ID
     * @return 投票信息
     */
    NovelCompleteVoteDto voteAgainstComplete(Long novelId, Long userId);
    
    /**
     * 取消完结投票（仅发起者可取消）
     * 
     * @param novelId 小说ID
     * @param userId 用户ID
     * @return 操作结果
     */
    boolean cancelCompleteVote(Long novelId, Long userId);
    
    /**
     * 获取完结投票状态
     * 
     * @param novelId 小说ID
     * @param userId 当前用户ID（可为null）
     * @return 投票信息
     */
    NovelCompleteVoteDto getCompleteVoteStatus(Long novelId, Long userId);
    
    /**
     * 检查是否可以发起投票
     * 
     * @param novelId 小说ID
     * @return 是否可以发起
     */
    boolean canInitiateVote(Long novelId);
}
